'''
抽象工厂：创建一个抽象化的工厂，并实现他的不同种的子类。
工厂的核心就是：创建并返回指定的产品或者产品实例。
'''
from abc import abstractmethod, ABC
import allPizza


class AbsFactory(ABC):
    
    @abstractmethod
    def createPizza(self, pizza_type):
        '''创建相应地方的pizza'''
        pass


class BJFactory(AbsFactory):
    
    def createPizza(self, pizza_type):
        pizza_name = 'BJ%sPizza' % pizza_type
        if not hasattr(allPizza, pizza_name):
            # 产品类型不存在，则返回None
            return None
        
        return getattr(allPizza, pizza_name)()  # 使用reflect返回具体pizza的实例


class LDFactory(AbsFactory):
    
    def createPizza(self, pizza_type):
        pizza_name = 'LD%sPizza' % pizza_type
        if not hasattr(allPizza, pizza_name):
            # 产品类型不存在，则返回None
            return None
        
        return getattr(allPizza, pizza_name)()